#include "VentanaPrincipal.h"
#include "Gui.h"

VentanaPrincipal::VentanaPrincipal(Gui* gui):
	contenedorPrincipal(false,0),
	contenedorBotones(false,0),
	botonPausa(Stock::MEDIA_PAUSE),
	botonRemover(Stock::REMOVE),
	botonEmpezar(Stock::MEDIA_PLAY),
	botonAgregar(Stock::ADD),
	botonPropiedades(Stock::PROPERTIES)
{

	// seteamos las opciones de la ventana
	this->set_title("Un .torrente de alegria");
	this->set_default_size(800,350);
	this->set_border_width(10);

	/** Conectamos todos los botones a su respectiva señal y los metemos en la ventana **/
	this->agregarBoton(this->botonAgregar);
	this->botonAgregar.signal_clicked().connect(sigc::mem_fun(*gui,&Gui::agregar));

	this->agregarBoton(this->botonRemover);
	this->botonRemover.signal_clicked().connect(sigc::mem_fun(*gui,&Gui::remover));

	this->agregarBoton(this->botonEmpezar);
	this->botonEmpezar.signal_clicked().connect(sigc::mem_fun(*gui,&Gui::empezar));

	this->agregarBoton(this->botonPausa);
	this->botonPausa.signal_clicked().connect(sigc::mem_fun(*gui,&Gui::pausar));

	this->agregarBoton(this->botonPropiedades);
	this->botonPropiedades.signal_clicked().connect(sigc::mem_fun(*gui,&Gui::verPropiedades));
	/************************************************************************************/

	// posicionamos los widgets usando HBox y VBox
	add(this->contenedorPrincipal);
	this->contenedorPrincipal.pack_start(contenedorBotones,PACK_SHRINK);
	this->contenedorPrincipal.pack_start(this->separador1,PACK_SHRINK);
	contenedorPrincipal.pack_start(this->contenedorLista,PACK_EXPAND_WIDGET);
	this->contenedorLista.set_policy(POLICY_AUTOMATIC,POLICY_AUTOMATIC);
	this->contenedorLista.add(this->vista);
	this->contenedorPrincipal.pack_start(this->separador2,PACK_SHRINK,0);
	this->contenedorPrincipal.pack_start(this->contenedorStatusbar,PACK_SHRINK);
	this->contenedorStatusbar.pack_end(mensaje, PACK_SHRINK);

	/******************* Seteamos el TreeView **********************************************/

	// seteamos el modelo
	vista.set_model(gui->modeloTorrents);

	// columna que muestra el nombre del torrent
	TreeView::Column* columna = vista.get_column(vista.append_column("Nombre", this->columnas.nombre) - 1);
	columna->set_min_width (200);

	// columna que muestra los MB bajados
	vista.append_column_numeric("Bajado", this->columnas.bajado,"%.1f MB");

	// columna que muestra el tamaño(en MB)
	vista.append_column_numeric("Tamaño", this->columnas.tamanio,"%.1f MB");

	// columna que muestra la velocidad(en KB/s)
	vista.append_column_numeric("Velocidad", this->columnas.velocidad, "%.2f KB/s");

	// columna que muestra la barra de progreso
	CellRendererProgress* barraProgreso = manage(new CellRendererProgress);
	columna = vista.get_column(vista.append_column("Porcentaje", *barraProgreso) - 1);
	columna->add_attribute(*barraProgreso, "value", this->columnas.porcentaje);
	columna->set_min_width (180);

	// columna que muestra la cantidad de peers conectados
	vista.append_column_numeric("Peers", this->columnas.peers,"%d");

	// columna que muestra el estado del torrent
	int cantColumnas = vista.append_column("Estado", this->columnas.estado);
	columna = vista.get_column(cantColumnas - 1);
	columna->set_min_width (80);

	// hago que todas las columnas sean reordenables y agrandables
	for(int i = 0; i < cantColumnas; i++) {
		TreeView::Column* columna = vista.get_column(i);
		columna->set_reorderable();
		columna->set_resizable();
	}
	/******************************************************************************************/
}

VentanaPrincipal::~VentanaPrincipal() {

}

void VentanaPrincipal::agregarBoton(Button& boton) {
	boton.set_image_position(POS_TOP);
	boton.set_size_request(80,50);
	this->contenedorBotones.pack_start(boton,PACK_SHRINK);
}

void VentanaPrincipal::escribir(Glib::ustring texto) {
	mensaje.set_label(texto);
}

Glib::RefPtr<TreeSelection> VentanaPrincipal::getSeleccionado() {
	return this->vista.get_selection();
}
